//
//  CZHomeTableViewController.swift
//  Weibo28
//
//  Created by Apple on 16/5/9.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
//  重用标记
private let HomeTableViewCellIdentifier = "HomeTableViewCellIdentifier"

class CZHomeTableViewController: CZVisitorTableViewController {
//    //  获取微博数据
//    var statusList: [CZStatus]?
    
    private lazy var statusListViewModel: CZStatusListViewModel = CZStatusListViewModel()
    
    //  上拉加载视图
    private lazy var pullUpView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = UIColor.redColor()
        return view
    }()
    //  系统下拉刷新
    private lazy var refreshCtr: UIRefreshControl = {
        let ctr = UIRefreshControl()
        return ctr
    }()
    //  自定义的下拉刷新
    private lazy var pullDownView: CZRefreshControl = {
        let ctr = CZRefreshControl()
        return ctr
    }()
    
    //  tip动画的控件
    private lazy var tipLabel: UILabel = {
        let label = UILabel(textColor: UIColor.whiteColor(), fontSize: 12)
        label.textAlignment = .Center
        label.backgroundColor = UIColor.orangeColor()
        label.text = "哈哈哈哈"
        label.hidden = true
        return label
        
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        if userLogin {
            //  添加控件设置约束
            setupUI()
            //  设置tableview的相关操作
            setupTableView()
            //  该代码已抽取到viewModel
//            requestStatus()
            loadStatus()
            //  测试的自定义下拉刷新控件
//            //  添加到父视图
//            let ctr = CZTestRefreshControl()
//            ctr.addTarget(self, action: "testRefresh:", forControlEvents: .ValueChanged)
//            tableView.addSubview(ctr)
            
            
        } else {
            //  未登录情况下
            //  访客视图信息
            visitorView?.setVistorInfo(nil, imageName: nil)
        }
    }
    
    private func setupUI() {
        //  把tip视图添加到导航栏下面
        if let nav = self.navigationController {
            tipLabel.frame = CGRectMake(0, CGRectGetMaxY(nav.navigationBar.frame) - 35, tableView.frame.size.width, 35)
            nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
        }
        
       
    
    }
    
    
    private func loadStatus() {
        statusListViewModel.requestStatus(pullUpView.isAnimating(), complete: { (isSuccess, message) -> () in
            if !self.pullUpView.isAnimating() {
                //  执行动画
                self.startAnimation(message)
                
            }
            //  闭包需要使用调用函数
            self.endRefreshing()
            
            if isSuccess {
                self.tableView.reloadData()
            }
        })
        
//        statusListViewModel.requestStatus(pullUpView.isAnimating()) { (isSuccess, message) -> () in
//            
//        }
        
    
    }
    
    private func endRefreshing() {
        //  关闭动画效果
        pullUpView.stopAnimating()
        //  结束刷新
        refreshCtr.endRefreshing()
        //  自定义控件结束刷新
        pullDownView.endRefreshing()
    }
    
    private func setupTableView() {
        //  UITableViewCell.self 获取对应Class, 相当于xib 里面设置identifier
        tableView.registerClass(CZStatusTableViewCell.self, forCellReuseIdentifier: HomeTableViewCellIdentifier)
        //  设置tableview的行高
        //  自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        //  设置预估高度
        tableView.estimatedRowHeight = 200
        //  去掉分割线
        tableView.separatorStyle = .None
        
        //  设置上拉加载更多的视图
        tableView.tableFooterView = pullUpView
        //  设置大小,防止显示出来没有留位置
        pullUpView.sizeToFit()
//        //  添加下拉刷新的第一种方式
       // refreshCtr.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
//        self.refreshControl = refreshCtr
        //  添加下拉刷新的第二种方式
//        tableView.addSubview(refreshCtr)
        
        //  自定义下拉刷新
        pullDownView.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
        //  添加我们自定义的下拉刷新
        tableView.addSubview(pullDownView)
        
       
    }
    
    @objc private func pullDownRefresh() {
        
        //  下拉刷新加载数据
        loadStatus()
        
        
//        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
//            
//            
//            
//            //  结束刷新
//            self.refreshCtr.endRefreshing()
//        })
        
    }
    
    private func startAnimation(message: String) {
        //  防止执行动画再次让其执行
        if tipLabel.hidden == false {
            return
        }
        
        //  赋值显示的内容
        tipLabel.text = message
        //  显示tiplabel
        tipLabel.hidden = false
        
        UIView.animateWithDuration(1, animations: { () -> Void in
            self.tipLabel.transform = CGAffineTransformMakeTranslation(0, self.tipLabel.frame.size.height)
            }) { (_) -> Void in
                
                UIView.animateWithDuration(1, animations: { () -> Void in
                    //  回到原始位置
                    self.tipLabel.transform = CGAffineTransformIdentity
                    
                    }, completion: { (_) -> Void in
                    self.tipLabel.hidden = true
                })
                
        }
        
        
        
        
    }
    
    
    
    
    //  获取微博数据
//    private func requestStatus() {
//        CZNetWorkTools.sharedTools.requestStatus(CZUserAccountViewModel.sharedUserAccount.accessToken!) { (response, error) -> () in
//            
//            if error != nil {
//                print("网络请求异常")
//                return
//            }
//            
//            //  代码执行到此说明我们网络请求成功
//            guard let dic = response as? [String: AnyObject] else {
//                print("不是一个正确的json格式")
//                return
//            }
//            
//            guard let statusesArray = dic["statuses"] as? [[String: AnyObject]] else {
//                print("不是一个正确的json格式")
//                return
//            }
//            
//            //  遍历数组字典初始化模型
//            var tempArray = [CZStatus]()
//            for value in statusesArray {
//                let status = CZStatus(dic: value)
//                tempArray.append(status)
//            }
//            //  刷新数据
//            self.statusList = tempArray
//            self.tableView.reloadData()
//            
//            
//            
//        }
//    
//    }

   //  MARK:    -测试刷新
    func testRefresh(ctr: CZTestRefreshControl) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
            ctr.endRefreshing()
        })
    }

}
//  数据源代理方法
extension CZHomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList?.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeTableViewCellIdentifier, forIndexPath: indexPath) as! CZStatusTableViewCell
        cell.statusViewModel = statusListViewModel.statusList![indexPath.row]
//        cell.textLabel?.text = statusListViewModel.statusList![indexPath.row].text
        //  去掉选中颜色
        cell.selectionStyle = .None
        return cell
        
    }
    //  将要显示cell
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        //  进入到滑动到作用一个cell并且我们的上拉加载更多的动画没有执行,那么才能进入开启动画
        if indexPath.row == statusListViewModel.statusList!.count - 1 && !pullUpView.isAnimating() {
            //  
            print("我已经是最后一条微博了")
            
            //  开启动画
            pullUpView.startAnimating()
            //  数据请求
            loadStatus()
        }
    }
    
}

